home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xgrabsc / mem.hc < prev    next >
Text File  |  1995-05-09  |  2KB  |  89 lines

  1. /*========================================================================
  2.  *
  3.  * Name - mem.hc
  4.  *
  5.  * ccs version:    1.2
  6.  *
  7.  * ccsid:    @(#)mem.hc    1.2 - 07/06/92 10:52:47
  8.  * from:     ccs/s.mem.hc
  9.  * date:     06/28/93 09:14:49
  10.  *
  11.  * Description:  memcpy/set functions for xgrabsc
  12.  *
  13.  *
  14.  *========================================================================
  15.  */
  16.  
  17. #ifdef MEMCPY
  18.  
  19. /* memcpy and memset routines from C News */
  20.  
  21.  
  22. /*
  23.  * memcpy - copy bytes
  24.  */
  25.  
  26. char *
  27. memcpy(dst, src, size)
  28. char * dst;
  29.  char * src;
  30. int size;
  31. {
  32.         register char *d;
  33.         register  char *s;
  34.         register int n;
  35.  
  36.         if (size <= 0)
  37.                 return(dst);
  38.  
  39.         s = src;
  40.         d = dst;
  41.         if (s <= d && s + (size-1) >= d) {
  42.                 /* Overlap, must copy right-to-left. */
  43.                 s += size-1;
  44.                 d += size-1;
  45.                 for (n = size; n > 0; n--)
  46.                         *d-- = *s--;
  47.         } else
  48.                 for (n = size; n > 0; n--)
  49.                         *d++ = *s++;
  50.  
  51.         return(dst);
  52. }
  53.  
  54. /*
  55.  * memset - set bytes
  56.  *
  57.  * CHARBITS should be defined only if the compiler lacks "unsigned char".
  58.  * It should be a mask, e.g. 0377 for an 8-bit machine.
  59.  */
  60.  
  61. #ifndef CHARBITS
  62. #       define  UNSCHAR(c)      ((unsigned char)(c))
  63. #else
  64. #       define  UNSCHAR(c)      ((c)&CHARBITS)
  65. #endif
  66.  
  67. char *
  68. memset(s, ucharfill, size)
  69.  char * s;
  70. register int ucharfill;
  71. int size;
  72. {
  73.         register  char *scan;
  74.         register int n;
  75.         register int uc;
  76.  
  77.         scan = s;
  78.         uc = UNSCHAR(ucharfill);
  79.         for (n = size; n > 0; n--)
  80.                 *scan++ = uc;
  81.  
  82.         return(s);
  83. }
  84. #endif /* MEMCPY */
  85.  
  86.  
  87.  
  88.  
  89.